﻿using System;
using System.Drawing;
using System.IO;

namespace Rename.UC.FastOLSV
{
    internal static class Util
    {
        public static string FormatFileSize(long size)
        {
            int[] limits = new int[] { 1024 * 1024 * 1024, 1024 * 1024, 1024 };
            string[] units = new string[] { "GB", "MB", "KB" };

            for (int i = 0; i < limits.Length; i++)
            {
                if (size >= limits[i])
                    return String.Format("{0:#,##0.##} " + units[i], ((double)size / limits[i]));
            }

            return String.Format("{0} bytes", size);
        }
        /// <summary>
        /// 获取图片的拍摄时间
        /// </summary>
        /// <param name="imagePath">图片文件路径</param>
        /// <returns>拍摄时间（如果存在），否则返回null</returns>
        public static DateTime? GetCaptureTime(string imagePath)
        {
            try
            {
                using (var image = Image.FromFile(imagePath))
                {
                    // 获取图片的所有属性
                    var propItems = image.PropertyItems;

                    // EXIF中拍摄时间的标签ID是36867
                    const int dateTimeOriginalTagId = 0x9003; // 36867

                    foreach (var prop in propItems)
                    {
                        if (prop.Id == dateTimeOriginalTagId)
                        {
                            // 将字节数组转换为字符串（EXIF时间格式："yyyy:MM:dd HH:mm:ss\0"）
                            string dateTimeString = System.Text.Encoding.ASCII.GetString(prop.Value);
                            dateTimeString = dateTimeString.Trim('\0'); // 去除结尾的空字符

                            // 解析时间字符串
                            if (DateTime.TryParseExact(
                                dateTimeString,
                                "yyyy:MM:dd HH:mm:ss",
                                System.Globalization.CultureInfo.InvariantCulture,
                                System.Globalization.DateTimeStyles.None,
                                out DateTime captureTime))
                            {
                                return captureTime;
                            }
                        }
                    }
                    // 如果没有找到拍摄时间，尝试获取修改时间
                    return File.GetCreationTime(imagePath);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"获取拍摄时间失败：{ex.Message}");
                return null;
            }
        }
        // 计算文件总数（包括所有子目录）
        public static int GetFileCount(DirectoryInfo dirInfo)
        {
            int count = 0;
            // 统计当前目录中的文件
            count += dirInfo.GetFiles().Length;
            // 递归统计所有子目录中的文件
            foreach (DirectoryInfo subDir in dirInfo.GetDirectories())
            {
                count += GetFileCount(subDir);
            }
            return count;
        }
    }
}
